package com.bjsxt;
/**多线程
 * 程序（program）:是一个静态的概念，一般对应于操作系统中的一个可执行文件
 * 进程：执行中的程序叫进程，是一个动态的概念，其实进程就是一个在内存中独立运行的程序空间。如
 正在运行的写字板程序。
 如下特点：1，进程是程序一次动态执行过程，占用特定的地址空间
   2，每个进程由3部分组成：cpu,data,code.每个进程都是独立的，保有自己的
 cpu时间，代码和数据，即便用一份程序产生好几个进程，它们之间还是拥有自己的这3样东西
 ，缺点是：浪费内存，cpu的负担重
  3，多任务（Multitasking）操作系统将cpu时间动态地划分给每个进程，操作系统同时执行多个进程，
 每个进程独立运行，以进程的观点来看，它以为自己独占cpu的使用权 （实际不是独占cpu，轮换机制）
  4，进程查看 ：Windows系统：Ctrl+Alt+Del*/

/**线程：（运行在进程里）一个进程可以产生多个线程,同一进程的多个线程也可以共享此进程的某些资源（比如：
 代码、数据），所以线程又被称为量级进程（lightweight process）
  1， 一个进程内部的一个执行单元，它是程序中的一个单一的顺序控制流程 （如main方法就是程序的主线程）
  2， 一个进程可拥有多个并行的（concurrent）线程
  3，一个进程中的多个线程共享相同的内存单元/内存址空间，可以访问相同的变量和对象，而且它们从同一堆中
 分配对象并进行通信、数据交换和同步操作。
  4，由于线程间的通信是在同一地址空间上进行的，所以不需要额外的通信机制，这就使得通信更简便而且信息传递
     的速度也更快
  5，线程的启动、中断、消亡、消耗的资源非常小*/
public class ThreadTest00 {
    /*线程和进程的区别
    * 线程在进程中运行
    * 一个进程可以包含多个线程
    * 不同进程间数据很难共享，而同一进程下不同线程间数据很容易共享
    * 进程要比线程消耗更多的计算机资源
    * 进程间不会相互影响，因为它们的空间是完全隔离的，而进程中的一个线程将导致整个
    * 进程挂掉
    * 进程使用的内存地址可以上锁，即一个线程使用某些共享内存时，其它的线程必须等它结束，才能使用这一块内存
    * 一个进程如果只有一个线程则可以被看作单线程的，如果一个进程内拥有多个线程，进程
    * 的执行过程不是一条线（线程）的，而是多条线（线程 ）共同完成的*/

    /*并发（concurrent）：指在一段时间内同时做多个事情。当有多个线程在运行时，如果只有一个cpu，这种情况下计算机操作系统会采用并发技术实
    * 现并发运行，具体做法是采用“时间片轮询算法”，在一个时间段的线程代码运行时，其它
    * 线程处于就绪状。*/

    /*线程的执行特点：启动方与被启动方，方法并列运行，谁与不用等谁*/

    /*主线程：当java程序启动时，一个线程会立刻运行，该线程通常叫做程序的主线程（main thread）
    * 即main方法对应的线程 ，它是程序开始时执行的
    *  java应用程序会有一个main方法，是作为某个类的方法出现，当程序启动时，该方法就会第一
    * 个自动的得到执行，并成为程序的主线程。main方法是一个应用的入口，也代表了这个应用的主线程，
    * JVM在执行main方法时，main方法会进入到栈内存，jvm会通过操作系统开辟一条maim方法通向cpu的
    * 执行路径，cpu就可以通过这个路径来执行main谅，而这个路径有一个名字叫main(主)线程*/
    /*主线程的特点：
    * 它是产生其他子线程的线程
    * 它不一定是最后完成执行的线程，子线程可能在它结束之后还在运行*/
    /*子线程：在主线程中创建并启动的线程*/
}
